package com.Questions.hash;

import java.util.*;

/**
 * 最长连续序列
 */
public class leetcode128 {
    public int longestConsecutive1(int[] nums) {
        Map<Integer,Integer> map=new HashMap<>();
        for(int num:nums){
            map.put(num,map.getOrDefault(num,0)+1);
        }
        int res=0;
//        map.forEach((k,v)->{
//            int cur=findNext(map,k,new int[1]);
//            res=Math.max(res,cur);
//        });
        for(Integer k:map.keySet()){
            int cur=findNext(map,k,new int[1]);
            res=Math.max(res,cur);
        }
        return res;
    }
    public int findNext(Map<Integer,Integer> map,Integer k,int[] res){
        if(map.containsKey(k)&&map.get(k)>0){
            res[0]++;
            map.put(k,0);
            findNext(map,k,res);
            findNext(map,k-1,res);
            findNext(map,k+1,res);
        }
        return res[0];
    }

    public int longestConsecutive(int[] nums) {
        Set<Integer> num_set=new HashSet<Integer>();
        for(int num:nums){
            num_set.add(num);
        }
        int lenmax=0;
        for(int num:num_set){
            if(!num_set.contains(num-1)){
                int curnum=num;
                int len=1;
                while(num_set.contains(curnum+1)){
                    len++;
                    curnum++;
                }
                lenmax=Math.max(lenmax,len);
            }
        }
        return lenmax;
    }
}
